package com.lance.answer.gui.answer.gk.answer.lms.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor
@Data
public class LmsActivities {


    @JsonProperty("classrooms")
    private List<?> classrooms;
    @JsonProperty("exams")
    private List<?> exams;
    @JsonProperty("learning_activities")
    private List<LearningActivitiesDTO> learningActivities;
    @JsonProperty("live_records")
    private List<?> liveRecords;

    @NoArgsConstructor
    @Data
    public static class LearningActivitiesDTO {
        @JsonProperty("assign_group_ids")
        private List<?> assignGroupIds;
        @JsonProperty("assign_student_ids")
        private List<?> assignStudentIds;
        @JsonProperty("can_show_score")
        private Boolean canShowScore;
        @JsonProperty("completion_criterion")
        private String completionCriterion;
        @JsonProperty("completion_criterion_key")
        private String completionCriterionKey;
        @JsonProperty("completion_criterion_value")
        private Object completionCriterionValue;
        @JsonProperty("course_id")
        private Long courseId;
        @JsonProperty("created_at")
        private String createdAt;
        @JsonProperty("created_by")
        private CreatedByDTO createdBy;
        @JsonProperty("data")
        private DataDTO data;
        @JsonProperty("end_time")
        private Object endTime;
        @JsonProperty("group_set_id")
        private Integer groupSetId;
        @JsonProperty("group_set_name")
        private String groupSetName;
        @JsonProperty("has_assign_group")
        private Boolean hasAssignGroup;
        @JsonProperty("has_assign_student")
        private Boolean hasAssignStudent;
        @JsonProperty("id")
        private Long id;
        @JsonProperty("imported_from")
        private String importedFrom;
        @JsonProperty("imported_track_id")
        private String importedTrackId;
        @JsonProperty("inter_review_named")
        private Object interReviewNamed;
        @JsonProperty("inter_score_map")
        private InterScoreMapDTO interScoreMap;
        @JsonProperty("intra_rubric_id")
        private Integer intraRubricId;
        @JsonProperty("intra_rubric_instance")
        private IntraRubricInstanceDTO intraRubricInstance;
        @JsonProperty("intra_rubric_instance_id")
        private Integer intraRubricInstanceId;
        @JsonProperty("intra_score_map")
        private IntraScoreMapDTO intraScoreMap;
        @JsonProperty("is_assigned_to_all")
        private Boolean isAssignedToAll;
        @JsonProperty("is_closed")
        private Boolean isClosed;
        @JsonProperty("is_final")
        private Boolean isFinal;
        @JsonProperty("is_formative")
        private Boolean isFormative;
        @JsonProperty("is_inter_review_by_submitter")
        private Object isInterReviewBySubmitter;
        @JsonProperty("is_open")
        private Boolean isOpen;
        @JsonProperty("is_opened_catalog")
        private Boolean isOpenedCatalog;
        @JsonProperty("is_started")
        private Boolean isStarted;
        @JsonProperty("is_submit_closed")
        private Object isSubmitClosed;
        @JsonProperty("late_submission_count")
        private Integer lateSubmissionCount;
        @JsonProperty("module_id")
        private Long moduleId;
        @JsonProperty("non_submit_times")
        private Object nonSubmitTimes;
        @JsonProperty("prerequisites")
        private List<?> prerequisites;
        @JsonProperty("rubric_id")
        private Integer rubricId;
        @JsonProperty("rubric_instance")
        private RubricInstanceDTO rubricInstance;
        @JsonProperty("rubric_instance_id")
        private Integer rubricInstanceId;
        @JsonProperty("score_percentage")
        private Object scorePercentage;
        @JsonProperty("score_published")
        private Object scorePublished;
        @JsonProperty("sort")
        private Integer sort;
        @JsonProperty("start_time")
        private String startTime;
        @JsonProperty("submission_closed")
        private Boolean submissionClosed;
        @JsonProperty("submit_by_group")
        private Boolean submitByGroup;
        @JsonProperty("submit_times")
        private Object submitTimes;
        @JsonProperty("syllabus_id")
     //   private Integer syllabusId;
        private Long syllabusId;
        @JsonProperty("teaching_unit_id")
        private Long teachingUnitId;
        @JsonProperty("title")
        private String title;
        @JsonProperty("type")
        private String type;
        @JsonProperty("unique_key")
        private String uniqueKey;
        @JsonProperty("updated_at")
        private String updatedAt;
        @JsonProperty("uploads")
        private List<?> uploads;

        @NoArgsConstructor
        @Data
        public static class CreatedByDTO {
            @JsonProperty("id")
            private Long id;
            @JsonProperty("name")
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class DataDTO {
            @JsonProperty("announce_score_time")
            private Object announceScoreTime;
            @JsonProperty("announce_score_type")
            private Integer announceScoreType;
            @JsonProperty("is_scored")
            private Boolean isScored;
            @JsonProperty("mbz_module_id")
            private String mbzModuleId;
            @JsonProperty("score_percentage")
            private Integer scorePercentage;
        }

        @NoArgsConstructor
        @Data
        public static class InterScoreMapDTO {
            @JsonProperty("end_time")
            private Object endTime;
            @JsonProperty("id")
            private Long id;
            @JsonProperty("is_closed")
            private Object isClosed;
            @JsonProperty("is_started")
            private Object isStarted;
            @JsonProperty("pieces_cnt")
            private Integer piecesCnt;
            @JsonProperty("start_time")
            private Object startTime;
        }

        @NoArgsConstructor
        @Data
        public static class IntraRubricInstanceDTO {
            @JsonProperty("conditions")
            private Object conditions;
            @JsonProperty("id")
            private Long id;
            @JsonProperty("name")
            private Object name;
            @JsonProperty("rubric")
            private RubricDTO rubric;

            @NoArgsConstructor
            @Data
            public static class RubricDTO {
                @JsonProperty("conditions")
                private Object conditions;
                @JsonProperty("created_at")
                private Object createdAt;
                @JsonProperty("created_by")
                private CreatedByDTO createdBy;
                @JsonProperty("engage_number")
                private Integer engageNumber;
                @JsonProperty("id")
                private Long id;
                @JsonProperty("name")
                private Object name;
                @JsonProperty("updated_at")
                private Object updatedAt;

                @NoArgsConstructor
                @Data
                public static class CreatedByDTO {
                    @JsonProperty("id")
                    private Long id;
                    @JsonProperty("name")
                    private Object name;
                }
            }
        }

        @NoArgsConstructor
        @Data
        public static class IntraScoreMapDTO {
            @JsonProperty("end_time")
            private Object endTime;
            @JsonProperty("id")
            private Long id;
            @JsonProperty("is_closed")
            private Object isClosed;
            @JsonProperty("start_time")
            private Object startTime;
        }

        @NoArgsConstructor
        @Data
        public static class RubricInstanceDTO {
            @JsonProperty("conditions")
            private Object conditions;
            @JsonProperty("id")
            private Long id;
            @JsonProperty("name")
            private Object name;
            @JsonProperty("rubric")
            private RubricDTO rubric;

            @NoArgsConstructor
            @Data
            public static class RubricDTO {
                @JsonProperty("conditions")
                private Object conditions;
                @JsonProperty("created_at")
                private Object createdAt;
                @JsonProperty("created_by")
                private CreatedByDTO createdBy;
                @JsonProperty("engage_number")
                private Integer engageNumber;
                @JsonProperty("id")
                private Long id;
                @JsonProperty("name")
                private Object name;
                @JsonProperty("updated_at")
                private Object updatedAt;

                @NoArgsConstructor
                @Data
                public static class CreatedByDTO {
                    @JsonProperty("id")
                    private Long id;
                    @JsonProperty("name")
                    private Object name;
                }
            }
        }
    }
}


